package controller;
import java.util.Timer;
import java.util.TimerTask;
import model.Task;
public class TaskGenerator {
private int minimumArrival, maximumArrival, minimumServiceTime, maximumServiceTime;
private int simulationTime, timePassed;
private int numberOfQueues, nrOfTasksPerQueue;
private Timer timer;
private TaskScheduler taskScheduler;
public TaskGenerator(int minimumArrival, int maximumArrival, int minimumServiceTime, int maximumServiceTime,
int simulationTime, int numberOfQueues, int nrOfTasksPerQueue) {
this.minimumArrival = minimumArrival;
this.maximumArrival = maximumArrival;
this.minimumServiceTime = minimumServiceTime;
this.maximumServiceTime = maximumServiceTime;
this.simulationTime = simulationTime;
this.numberOfQueues = numberOfQueues;
this.setNrOfTasksPerQueue(nrOfTasksPerQueue);
taskScheduler = new TaskScheduler(numberOfQueues, nrOfTasksPerQueue);
timer = new Timer();
}
private int getRandomWithinRange(int min, int max) {
int range = (max - min + 1);
return ((int) (Math.random() * range) + min);
}
public void start() {
timer.schedule(new TimerTask() {
@Override
public void run() {
if (timePassed == simulationTime) {
timer.cancel();
}
int arrivalTime = getRandomWithinRange(minimumArrival, maximumArrival);
int serviceTime = getRandomWithinRange(minimumServiceTime, maximumServiceTime);
taskScheduler.addTask(new Task(arrivalTime, serviceTime));
timePassed++;
}
}, 1000, 1000);
}
public int getNrOfTasksPerQueue() {
return nrOfTasksPerQueue;
}
public void setNrOfTasksPerQueue(int nrOfTasksPerQueue) {
this.nrOfTasksPerQueue = nrOfTasksPerQueue;
}
}